/*
 * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package com.sun.corba.se.spi.ior;

import org.omg.CORBA_2_3.portable.OutputStream;

import com.sun.corba.se.spi.orb.ORBVersion;
import com.sun.corba.se.spi.orb.ORB;

import com.sun.corba.se.spi.protocol.CorbaServerRequestDispatcher;

/**
 * An ObjectKeyTemplate represents the part of an Object Key
 * that corresponds to the object adapter used to create an
 * object reference.  The template is shared between many
 * object references.
 */
public interface ObjectKeyTemplate extends Writeable {

  public ORBVersion getORBVersion();

  /**
   * An ID used to determine how to perform operations on this
   * ObjectKeyTemplate.  This id determines how to process requests
   * on this object reference, and what object adapter type to use.
   */
  public int getSubcontractId();

  /**
   * Return the server ID for this template.
   * For CORBA 3.0, this should be a String, but it is currently
   * an int in the object key template.
   */
  public int getServerId();

  /**
   * Return the ORB ID for this template.
   */
  public String getORBId();

  /**
   * Return the object adapter ID for this template.
   */
  public ObjectAdapterId getObjectAdapterId();

  /**
   * Compute an adapter ID for this template than includes
   * all of the template information.
   * This value is cached to avoid the expense of recomputing
   * it.
   */
  public byte[] getAdapterId();

  public void write(ObjectId objectId, OutputStream os);

  public CorbaServerRequestDispatcher getServerRequestDispatcher(ORB orb, ObjectId id);
}
